package file

import (
	"ZHONGYIHANGYAN/util/log"
	"bytes"
	"encoding/json"
	"io"
	"os"
	"sync"
)

var logErr, logInfo = log.GetLogger("file")

// 读取JSON文件
func ReadFromJson(path string, v interface{}, lock *sync.RWMutex) {
	if lock != nil {
		lock.Lock()
		defer lock.Unlock()
	}

	if file, err := os.Open(path); err != nil {
		logErr.Printf("读取%s文件出错: %v", path, err)
	} else {
		defer file.Close()

		// 读取文件内容
		data, err := io.ReadAll(file)
		if err != nil {
			logErr.Printf("读取%s文件内容出错: %v", path, err)
			return
		}

		// 移除 UTF-8 BOM（如果存在）
		data = bytes.TrimPrefix(data, []byte{0xEF, 0xBB, 0xBF})

		// 解析 JSON
		if err := json.Unmarshal(data, v); err != nil {
			logErr.Printf("解析%s文件JSON出错: %v", path, err)
		}
	}

}

// 写入JSON文件
func WriteToJson(path string, v interface{}, lock *sync.RWMutex) {
	logErr.Printf("开始写json数据%s", path)
	if lock != nil {
		lock.Lock()
		defer lock.Unlock()
	}

	if file, err := os.Create(path); err != nil {
		logErr.Printf("写入%s文件出错: %v", path, err)
	} else {
		defer file.Close()
		e := json.NewEncoder(file)
		e.SetIndent("", "    ") // 设置4个空格缩进，保持JSON格式化
		e.Encode(v)
	}

}
